# 定义函数
# 缺省参数（有默认值的参数）必须放在参数列表末尾，否则会报错
# def stu_info(gender="男",name, age): # 缺省值参数必须放在其他参数的末尾，否则直接报错
def stu_info(name, age, gender="男"):  # ：缺省参数gender放最后
    # 打印学生基本信息
    print(f"{name}的年龄是：{age}，性别是：{gender}")
# 位置传参：按参数顺序传递，第三个参数覆盖默认性别
stu_info("张三",18,"女")
# stu_info(19,"李四","女") # 错误示例：参数顺序错误（年龄和姓名颠倒）
stu_info(age=19, name="王五", gender="女")

# 应用场景: 定义函数处理的参数个数不确定,需要用多值参数
# 定义多值参数的函数
def func(*args):
    print(args)
# args的结果是一个元组类型的数据

 # 需求:
# 1. 定义一个函数 sum_numbers，可以接收的 任意多个整数
# 2. 功能要求：将传递的 所有数字累加 并且返回累加结果
# 分析：
# 1.定义函数（有参数，并且个数不确定）
def sum_numbers(*args):
    # 一个变量args接收了一堆数据（元组类型数据）如：args = (1,2,3,4,5)
    # 定义初始结果变量
    result = 0
    # 先取出元素
    for i in args:
        print(i)
        # 在累加求和
        result += i
    # 返回结果
    return f"累加的结果是：{result}"

# 2.调用函数
aa = sum_numbers(1,2,3,4,5,6)
print(aa)

#元组拆包
# 分析：
# 1.定义函数（有参数，并且个数不确定）
def sum_numbers(*args):
    """
    累计求和返回结果
    :param args: 多个参数
    :return: 返回计算结果
    """
    # 多值参数的结果元组，所有数据累计求和：对于元组里面所有元素累计求和
    # 元组元素取出来，然后分别累计求和
    result = 0
    for i in args:
        result += i  # result = result + i
    return result

# 调用函数时,把一个元组变量当做整体传给多值参数时,需要在元组变量前面加* ,叫拆包
num = (1, 2, 3, 4, 5)  # 定义一个元组
print(sum_numbers(*num))  # 将整个元组作为实参传递时，需要先拆包再传递




